/**
 * reset触发change事件的补丁
 */
(function () {
  // 观察页面所有的form元素，绑定reset事件
  document.addEventListener(
    "reset",
    function (event) {
      // 事件对象e中的target属性，指向触发事件的元素
      var target = event.target;
      // 如果触发事件的元素是form元素
      if (target.tagName.toLowerCase() === "form") {
        // 遍历form元素中的所有input元素
        var inputs = [].slice.call(target.elements);
        // 只有当前后值变化的时候才会触发 change 事件
        inputs.forEach(function (input) {
          input.tempValue = input.value;
        });

        setTimeout(function () {
          inputs.forEach(function (input) {
            if (input.tempValue !== input.value) {
              input.dispatchEvent(new Event("change"));
            }
          });
        }, 20);
      }
    },
    false
  );
})();

/**
 * toggleAttribute的补丁
 * @see https://developer.mozilla.org/zh-CN/docs/Web/API/Element/toggleAttribute
 */
(function () {
  if (!Element.prototype.toggleAttribute) {
    Element.prototype.toggleAttribute = function (name, force) {
      if (force != void 0) force = !!force;
      if (this.hasAttribute(name)) {
        if (force) return true;
        this.removeAttribute(name);
        return false;
      }
      if (force === false) return false;
      this.setAttribute(name, "");
      return true;
    };
  }
})();

/**
 * ####
 */
(function () {
  // 为DOMTokenList对象添加一个adds方法，用于添加多个类名
  DOMTokenList.prototype.adds = function (tokens) {
    // 将传入的字符串按空格分割成数组
    tokens.split(" ").forEach(
      // 遍历数组，将每个元素添加到DOMTokenList对象中
      function (token) {
        this.add(token);
      }.bind(this)
    );
    // 返回DOMTokenList对象
    return this;
  };
})();
